#include <boost/thread/thread.hpp>
#include <boost/thread/tss.hpp>

#include <cassert> 

//      ÕâÀï¶¨ÒåÁËÒ»¸öÏß³Ì¶ÀÁ¢µÄÈ«¾Ö±äÁ¿ 
boost::thread_specific_ptr<int> value; 

void increment() 
{ 
   int* p = value.get(); 
   ++*p; 
} 

void thread_proc() 
{ 
   value.reset(new int(0)); // Ã¿¸öÏß³Ì³õÊ¼»¯×Ô¼ºµÄvalue¡£ 
   for (int i=0; i<10; ++i) 
   { 
       increment(); 
       int* p = value.get(); 
       assert(*p == i+1); // ÕâÀï¼ì²éÊÇ²»ÊÇÓÐ±ðµÄthreadÐÞ¸Ä±¾Ïß³ÌµÄvalue 
   } 
} 

int main(int argc, char* argv[]) 
{ 
   boost::thread_group threads; 
   for (int i=0; i<5; ++i) 
      threads.create_thread(&thread_proc); 
   threads.join_all(); 
} 

